#!/usr/bin/env python
# @FileName :密码.py
# @Time :2024/4/8 15:39
# @Author :Caojie

#判断密码大于8位
def passwd_over(passwd: str) -> bool:
    if len(passwd) >= 8:
        return True
    return False

#判断密码包含多种字符
def passwd_strs(passwd: str) -> bool:
    has_lowercase = False
    has_uppercase = False
    has_digit = False
    has_other = False

    for char in passwd:
        if char.islower():
            has_lowercase = True
        elif char.isupper():
            has_uppercase = True
        elif char.isdigit():
            has_digit = True
        else:
            has_other = True
    #判断是否包含三种以上
    if (has_lowercase + has_uppercase + has_digit + has_other) >= 3:
        return True
    return False

#判断长度超过或大于3的子串是否有重复
# def passwd_subs(passwd: str) -> bool:
#     for subs
#     str.count(sub)
def has_repeated_substring(s, min_length=3):
    # 初始化一个空的哈希集合来存储遇到的子串
    seen = set()
    # n 是字符串的长度
    n = len(s)

    # 遍历字符串，从每个可能的起始位置开始
    for i in range(n):
        # 子串的结束位置从当前起始位置开始，逐渐增加长度
        for j in range(i + min_length, n + 1):
            # 提取子串
            substr = s[i:j]
            # 如果子串已经在集合中，说明有重复
            if substr in seen:
                return False
                # 否则，将子串添加到集合中
            seen.add(substr)

            # 如果没有找到重复的子串，返回True
    return True

def passwd_level(passwd: str) -> int:
    #初始化一个列表来存储--要改进的点
    lst_suggest = []
    levelinfo = 2
    if passwd_over(passwd):
        levelinfo += 1
    else:
        lst_suggest.append('长度小于8')
    if passwd_strs(passwd):
        levelinfo += 1
    else:
        lst_suggest.append('密码没有由3种以上字符组成')
    if has_repeated_substring(passwd):
        levelinfo += 1
    else:
        lst_suggest.append('有长度不小于3的子串重复')
    return levelinfo, lst_suggest

def main():
    passwd = input("请输入一串密码：")
    #判断等级
    print(passwd_level(passwd))

main()